Function.prototype.myCall=function(ctx,...reset){ 
    let res;
     with(ctx){ 
         res =this(...reset) 
    } 
    console.log(res);
}
    
function printA(...reset){
    return this.a
}
let obj={
    a:'xxxxxx'
}
Function.prototype.myCall2=function(ctx){
    var context=ctx||window;
    var tempFn=context.fn
    context.fn=this;
    var args=[]
    for(var i =1;i<arguments.length;i++){
        args.push('arguments['+i+']') 
    }
    let res= eval('context.fn('+args+')')
    if(tempFn){
        context.fn=tempFn
    }else{
        delete context.fn
    }
    return res
}
console.log(printA.myCall2(obj));